package main

import (
	"fmt"
	"strconv"
)

//string转化为基本数据类型
func main() {
	var str string = "true"
	var b bool
	//strconv.ParseBool(str)这个函数本身会返回两个值，第一个值是bool，第二个值是error
	//因为我只关心bool对error不关心，所以使用"_"忽略
	b, _ = strconv.ParseBool(str)
	fmt.Printf("%T %v \n", b, b)

	var str2 string = "123456"
	var n1 int64
	var n2 int
	//这个函数本身会返回两个值，第一个值是int，第二个值是error,这里也是用"_"忽略error
	// 转化为10进制，64表示转化为int64，然后再把int64转化为int，
	// 如果要哦直接转化为int就使用int
	n1, _ = strconv.ParseInt(str2, 10, 64)
	n2 = int(n1)
	fmt.Printf("%T %v \n", n1, n1)
	fmt.Printf("%T %v \n", n2, n2)

	var str3 string = "12.3456"
	var f1 float64
	//64表示转化为float64，如果要是float32就要使用32
	f1, _ = strconv.ParseFloat(str3, 64)
	fmt.Printf("%T %v \n", f1, f1)
}

func 基本数据转化为string() {
	var num3 int = 99
	var num4 float64 = 23.456
	var b2 bool = true
	var str string
	//第二个参数base要转换的进制，这里是转为10进制，如果是2进制结果就是1100011字符串
	str = strconv.FormatInt(int64(num3), 10)
	fmt.Printf("%T %q \n", str, str)
	//第二个参数表示要转换的格式，第三个参数是精度表示几位小数，64表示这个小数是float64
	str = strconv.FormatFloat(num4, 'f', 10, 64)
	fmt.Printf("%T %q \n", str, str)

	str = strconv.FormatBool(b2)
	fmt.Printf("%T %q \n", str, str)

	//strconv中海油一个函数叫Itoa
	var num5 int = 4567
	str = strconv.Itoa(num5)
	fmt.Printf("%T %q \n", str, str)
	//如果是int的其他类型要先转化为int
	var num6 int16 = 4
	str = strconv.Itoa(int(num6))
	fmt.Printf("%T %q \n", str, str)

	var num7 float64 = 4.1
	str = strconv.Itoa(int(num7))
	fmt.Printf("%T %q \n", str, str)
}
